package algorithmic_data_structure.动态规划;

import org.junit.Test;

public class 谁是赌神 {
    public static int win1(int[] arr){
        int f = f(arr,0,arr.length-1);
        int g = g(arr,0,arr.length-1);
        if (f > g){
            System.out.println("先手胜利，获得金额为 ： " + f + " 输家获得金额为 ：" + g);
        }else{
            System.out.println("后手胜利，获得金额为 ： " + g + " 输家获得金额为 ：" + f);
        }
        return Math.max(f,g);
    }

    private static int f(int[] arr, int L, int R) {
        if (L == R){
            return arr[L];
        }
        int f1 = arr[L] + g(arr,L+1,R);
        int f2 = arr[R] + g(arr,L,R-1);
        return Math.max(f1,f2);
    }
    //后手意味着 没得选；也就是选别人先手选剩下的
    private static int g(int[] arr, int L, int R) {
        if (L == R){
            return 0;
        }
        int g1 = f(arr,L+1,R);
        int g2 = f(arr,L,R-1);
        return Math.min(g1,g2);
    }
    @Test
    public void test(){
        //4 1 100 !!!!!!!!!!!!! 电脑还是比人脑厉害得多啊 ！！！！！！！
        //5 3 2
        //！！！！！！！！！！！！以下是程序的选择！！！！！！！！！！！！！！！！！！！！！！！！！！！！
        //1 5 100
        //4 3 2
        win1(new int[]{1, 2, 100, 3, 5, 4});
        win1(new int[]{1, 2, 100, 3, 5, 4,99});
    }
}
